#ifndef _TLM_RMT_CFG_FACTORY_H
#define _TLM_RMT_CFG_FACTORY_H

#include "tlmRmtCfgSaver.h"

#include "tlmRmtCfg.h"
//## operation CreateDataInfo(uint8_t,uint32_t,uint8_t*)
class tlmRmtCfgDataInfo;

//## operation GetSaverInstance()
class tlmRmtCfgSaver;

//## operation GetSrvInstance(uint8_t,uint8_t)
class tlmServiceApp;

//## operation CreateSrvMsg(uint8_t*,uint32_t)
class tlmRmtCfgMsg;

//## class tlmRmtCfgFactory
class tlmRmtCfgFactory {
    ////    Friends    ////
    
public :


    ////    Constructors and destructors    ////
    
    tlmRmtCfgFactory();
    
    ~tlmRmtCfgFactory();
    
    ////    Operations    ////
    
    //## operation CreateDataInfo(uint8_t,uint32_t,uint8_t*)
    tlmRmtCfgDataInfo* CreateDataInfo(uint8_t msgType, uint32_t dataLen, uint8_t* dataPtr);
    
    //## operation CreateDataInfo(uint8_t)
    tlmRmtCfgDataInfo* CreateDataInfo(uint8_t msgType);
    
    //## operation CreateSrvMsg(uint8_t*,uint32_t)
    tlmRmtCfgMsg* CreateSrvMsg(const uint8_t* msgPtr, const uint32_t size);
    //## operation CreateSrvMsg(uint8_t,uint8_t)
    tlmRmtCfgMsg* CreateSrvMsg(uint8_t srvType, uint8_t msgType);
    //## operation GetInstance()
    static tlmRmtCfgFactory* GetInstance();
    
    //## operation GetSaverInstance()
    tlmRmtCfgSaver* GetSaverInstance();

	//## operation GetSrvInstance(uint8_t,uint8_t)
    tlmServiceApp* GetSrvInstance(uint8_t srvType, uint8_t msgType);
    
    
    ////    Additional operations    ////
    
    ////    Attributes    ////

protected :

    static tlmRmtCfgFactory* mpInstance;		//## attribute mpInstance
};

#endif
